#include<iostream>

using namespace std ;

const int maxn = 30;

int n , maxV , maxValue ;   //物品数量 ， 最大容量 ， 最大价值
int w[maxn] , c[maxn] ; //每件物品的重量和价值

void dfs(int index , int sumW , int sumC) {
    if(index == n) {
        //其实index == n - 1 的时候就装满了 ， index == n 的时候说明已经到了判断的时候了
        if(sumW <= maxV && sumC > maxValue) {
            maxValue = sumC ;
        }
        return ;
    }

    dfs(index + 1 , sumW , sumC) ;
    dfs(index + 1 , sumW + w[index] , sumC + c[index]) ;
}

int main() {

    scanf("%d%d" , &n , &maxV);
    for (int i = 0; i < n; ++i) {
        scanf("%d" , &w[i]);
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d" , &c[i]);
    }

    dfs(0 , 0 , 0);

    printf("%d" , maxValue);

    return  0;
}